package br.edu.catolica.sadbc.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Transient;

import org.jboss.seam.annotations.Name;

import br.edu.catolica.sadbc.core.entity.AbstractEntity;
import br.edu.catolica.sadbc.entity.enums.Semestre;
import br.edu.catolica.sadbc.entity.enums.SimNao;
import br.edu.catolica.sadbc.entity.enums.TipoSaida;

@Entity
@Name(value = "saida")
public class Saida extends AbstractEntity {
	
	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id_saida")
	private Long id;
	
	@Column(name = "anoSaida", insertable = true, updatable = true, nullable = false)
	private Integer anoSaida;
	
	@Column(name = "semestreSaida", insertable = true, updatable = true, nullable = false)
	private Integer semestreSaida;

	//FIXME - mudar para inteiro
	// private Boolean statusSaida = Boolean.FALSE;
	@Column(name = "statusSaida", insertable = true, updatable = true, nullable = false)
	private Integer statusSaida;
	
	@Column(name = "creditosSaida", insertable = true, updatable = true, nullable = false)
	private Integer creditosSaida;
	
	// FIXME - mudar para inteiro
	// private Boolean ativa = Boolean.FALSE;
	@Column(name = "ativa", insertable = true, updatable = true, nullable = false)
	private Integer ativa;
	
	@Column(name = "tipoSaida", insertable = true, updatable = true, nullable = false)
	private Integer tipoSaida;
	
	@ManyToOne(targetEntity = Docente.class, fetch = FetchType.LAZY)
	@JoinColumn(name = "docente_id_pessoa")
	private Docente docente = new Docente();
	
	private Date dataCadastro;
	
	private Date dataAtualizacao;
	
	public Saida() {

	}
	
	@Override
	public Long getId() {
		return id;
	}
	
	public void setId(Long id) {
		this.id = id;
	}

	public Integer getAnoSaida() {
		return anoSaida;
	}

	public void setAnoSaida(Integer anoSaida) {
		this.anoSaida = anoSaida;
	}

	public Integer getSemestreSaida() {
		return semestreSaida;
	}

	public void setSemestreSaida(Integer semestreSaida) {
		this.semestreSaida = semestreSaida;
	}

	public Integer getStatusSaida() {
		return statusSaida;
	}

	public void setStatusSaida(Integer statusSaida) {
		this.statusSaida = statusSaida;
	}

	public Integer getCreditosSaida() {
		return creditosSaida;
	}

	public void setCreditosSaida(Integer creditosSaida) {
		this.creditosSaida = creditosSaida;
	}

	//FIXME - mudar para inteiro
	public Integer getAtiva() {
		return ativa;
	}

	public void setAtiva(Integer ativa) {
		this.ativa = ativa;
	}

	public Docente getDocente() {
		return docente;
	}

	public void setDocente(Docente docente) {
		this.docente = docente;
	}

	public Integer getTipoSaida() {
		return tipoSaida;
	}

	public void setTipoSaida(Integer tipoSaida) {
		this.tipoSaida = tipoSaida;
	}
	
	public Date getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public Date getDataAtualizacao() {
		return dataAtualizacao;
	}

	public void setDataAtualizacao(Date dataAtualizacao) {
		this.dataAtualizacao = dataAtualizacao;
	}

	@Transient
	public String getSemestreSaidaDescription() {
		return Semestre.getEnumDescription(getSemestreSaida());
	}
	
	@Transient
	public String getTipoSaidaDescription() {
		return TipoSaida.getEnumDescription(getTipoSaida());
	}
	
	@Transient
	public String getAtivaDescription() {
		if (getAtiva().equals(SimNao.SIM.getValue())) {
			return "Ativa";
		} else {
			return "Inativa";
		}
	}

}
